#ifndef __DRIVER_I2C_H__
#define __DRIVER_I2C_H__

#include "Common_Config.h"
#include "Common_Debug.h"
#include "fm33lg0xx_fl.h"
#include "FreeRTOS.h"
#include "task.h"

typedef enum
{
    ACK  = 0,
    NACK = 1
} ACKStatus_t;

/* 选择SCLx以此来使用I2C */
typedef enum
{
    SCLx_1 = 0,
    SCLx_2 = 1,
    SCLx_3 = 2
} SelSCLx_t;

/**
 * @brief 初始化I2C
 *
 */
void Driver_I2C_Init(void);

/**
 * @brief 发送起始信号
 *
 */
void Driver_I2C_Start(void);

/**
 * @brief 发送停止信号
 *
 */
void Driver_I2C_Stop(void);

/**
 * @brief 发送ACK
 *
 */
void Driver_I2C_Ack(void);

/**
 * @brief 发送NACK
 *
 */
void Driver_I2C_Nack(void);

/**
 * @brief 等待对方ACK响应
 *
 * @return ACKStatus_t ACK or NACK
 */
ACKStatus_t Driver_I2C_Wait4Ack(void);

/**
 * @brief 发送一个字节的数据
 *
 * @param txData 发送的一个字节数据
 */
void Driver_I2C_SendByte(uint8_t txData);

/**
 * @brief 接收一个字节的数据
 *
 * @return uint8_t 接收到的一个字节的数据
 */
uint8_t Driver_I2C_ReceiveByte(void);

/**
 * @brief 选择要使用的SCL引脚
 *
 * @param sclx SCLx_1、SCLx_2、SCLx_3
 */
void Driver_I2C_SelectSCLx(SelSCLx_t sclx);

#endif
